#pragma once
/*
实用工具的实现：
    1. 获取系统时间
    2. 判断文件是否存在
    3. 获取文件路径
    4. 创建目录（）
*/
#include <iostream>
#include <time.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
namespace senlog
{
    namespace util // 工具类框架
    {
        class Date
        {
        public:
            static size_t getTime()
            {
                // 1 复习time函数 
                return (size_t)time(nullptr);
            }
        };
        class File
        {
        public:
            static bool exists(const std::string &pathname) // 判断文件名是否存在
            {
                // man 2 access, 文件存在返回0，反之-1
                // return (access(pathname.c_str(), F_OK) == 0);

                // 2 注意使用的系统调用函数可能无法实现跨平台性（windows下可能没有该函数的定义实现）
                // man 2 stat
                struct stat st;
                if (stat(pathname.c_str(), &st) < 0)
                    return false;
                return true;
            }

            static std::string path(const std::string &pathname) // 返回该文件名对应的目录 字符串
            {
                std::cout << pathname << std::endl;
                size_t pos = pathname.find_last_of("/\\");
                if (pos == std::string::npos)
                    return ".";
                return pathname.substr(0, pos + 1); // 包含最后一个 '/'
            }

            static void createDirectory(const std::string &pathname) // 创建目录
            {
                size_t pos = 0, idx = 0;
                while (idx < pathname.size())
                {
                    pos = pathname.find_first_of("/\\", idx); // 从idx这个位置开始找 '/' or '\'
                    if (pos == std::string::npos)
                    {
                        // 从开始就没有找到 '/', 说名pathname 就是文件名了
                        mkdir(pathname.c_str(), 0777);
                    }
                    std::string parent_file_name = pathname.substr(0, pos + 1); // ./  ./abc/
                    if (exists(parent_file_name) == true)
                    {
                        idx = pos + 1;
                        continue;
                    }
                    mkdir(parent_file_name.c_str(), 0777);
                    idx = pos + 1;
                }
            }
        };
    }

}
